﻿#pragma once
#include "Data/DataMgr.h"

struct _stTerrainTypeInfo
{
	std::wstring KeyName;		// Key
	std::wstring DisplayNameIndex;	// 显示名称索引
	bool bIsWater;				// 是否是水
	bool bInlandSea;			// 是否是内海
	float fMovementCost;		// 移速
	float fMaxAttrition;		// 最大消耗
	BYTE nSupplyLimit;			// 补给限制
	BYTE nBottleneckChance;		// 交通堵塞概率(不知道是什么)
	float fDefence;				// 防御系数
	_stTerrainTypeInfo(){ clear(); }
	void clear()	// 数据清空
	{ KeyName = L""; DisplayNameIndex = L""; bIsWater = false; bInlandSea = false; fMovementCost = 0.f; fMaxAttrition = 0.f; nSupplyLimit = 0; nBottleneckChance = 0; fDefence = 0.f; }
	bool empty() const	// 是否是空数据
	{ return KeyName.empty(); }
};

class CTerrainTypeInfo
{
	friend class CScriptDataMgr;	// 只有CScriptDataMgr能实例化这个类

public:
	const _stTerrainTypeInfo* GetInfoCPtr (const std::wstring& KeyIn) const;	// 通过key取得m_mapTerrainTypeInfo存储的信息 没有则insert一个空数据

	~CTerrainTypeInfo() = default;
private:
	CTerrainTypeInfo() = default;
	CTerrainTypeInfo(const CTerrainTypeInfo&) = delete;
	CTerrainTypeInfo& operator=(const CTerrainTypeInfo&) = delete;

	bool IsDataComplete() const;	// 检查map中所有数据是否都不为空

	std::unordered_map<std::wstring, _stTerrainTypeInfo> m_mapTerrainTypeInfo;	// Key:_stTerrainTexture.TerrainName
};